package com.s2015.doors.dao;

import java.util.List;

import com.s2015.doors.beans.MaterialType;
import com.s2015.doors.beans.Profile;
import com.s2015.doors.beans.ProfileSeries;
import com.s2015.doors.beans.User;
import com.s2015.doors.beans.Vendor;
import com.s2015.doors.beans.WindowSeries;
import com.s2015.doors.beans.WindowType;

/**
 * 关于 窗户型材的 操作都在这里面
 * 非标准库
 * @author Guodeqi
 *
 */
public interface IWindowDao {
	
	//#################### retrieved start ##############
	/**
	 * 分页取数据
	 * @param offset	偏移量 从offset的下一个数据开始取
	 * @param len		最大取多少
	 * @return
	 */
	public List<Profile> getProfileByPaging(int offset,int len);
	
	/**
	 * 通过ID 获得厂商信息
	 * @param id
	 * @return
	 */
	public Vendor getVendorByID(Long id);
	
	public MaterialType getMaterialTypeByID(Long id);
	public WindowSeries getWindowSeriesByID(Long id);
	public ProfileSeries getProfileSeriesByID(Long id);
	public WindowType getWindowTypeByID(Long id);
	public Profile getProfileByID(Long id);
	
	/**
	 * 通过 用户的ID 得到 用户所对应的 厂商
	 * @param id		用户ID
	 * @return
	 */
	public List<Vendor> getVendorsByUserID(Long id);
	public List<Vendor> getVendorsByUser(User user);
	
	/**
	 * 通过 Vendor 找到 所包含的 MaterialType（材质）
	 * @param id	    VendorID
	 * @return
	 */
	public List<MaterialType> getMaterialTypesByVendorID(Long id);
	public List<MaterialType> getMaterialTypesByVendor(Vendor vendor);
	
	/**
	 * 通过 Vendor 找到 所包含的 WindowSeries（窗型系列）
	 * @param id	    VendorID
	 * @return
	 */
	public List<WindowSeries> getWindowSsByVendorID(Long id);
	public List<WindowSeries> getWindowSsByVendor(Vendor vendor);
	
	/**
	 * 通过 Vendor 找到 所包含的 ProfileSeries（型材系列）
	 * @param id	    VendorID
	 * @return
	 */
	public List<ProfileSeries> getProfileSsByVendorID(Long id);
	public List<ProfileSeries> getProfileSeriessByVendor(Vendor vendor);
	
	/**
	 * 通过 Vendor 找到 所包含的 WindowType（窗型，图、跟计算公式有关）
	 * @param id	    VendorID
	 * @return
	 */
	public List<WindowType> getWindowTypesByVendorID(Long id);
	public List<WindowType> getWindowTypesByVendor(Vendor vendor);
	
	/**
	 * 根据所选信息 找到对应 型材
	 * @param mt_id	MaterialType ID   材质ID
	 * @param ws_id	WindowSeries ID	窗型系列ID
	 * @param wt_id	WindowType ID    窗型 ID
	 * @param ps_id	ProfileSeries ID		型材系列ID
	 * @return
	 */
	public List<Profile> getProfilesByInfo(Long mt_id,Long ws_id,Long wt_id,Long ps_id);
	public List<Profile> getProfilesByInfo(MaterialType mt,WindowSeries ws, WindowType wt, ProfileSeries ps);
	//#################### retrieved	end ##############
	
	
	//#################### create	start ##############
	/**
	 * 为用户 添加一个厂商信息
	 * @param vendor	厂商bean 
	 * @throws Exception
	 */
	public void addVendor(Vendor vendor) throws Exception;
	
	/**
	 * 为厂商添加一个WindowType 
	 * @param wt		WindowType Bean窗型
	 * @throws Exception
	 */
	public void addWindowType(WindowType wt) throws Exception;
	
	/**
	 * 添加 一个型材系列
	 * @param ps
	 * @throws Exception
	 */
	public void addProfileSs(ProfileSeries ps) throws Exception;
	
	/** 
	 * 添加 一个型材
	 * @param profile
	 * @throws Exception
	 */
	public void addProfile(Profile profile) throws Exception;
	//#################### create	end ##############
	
	
	//#################### update	start ##############
	/**
	 * 更新一个型材信息
	 * @param profile
	 * @throws Exception
	 */
	public void updateProfile(Profile newProfile) throws Exception;
	
	/**
	 *  更新一个Vendor
	 * @param Vendor
	 * @throws Exception
	 */
	public void updateVendor(Vendor newVendor) throws Exception;
	
	/**
	 * 更新一个WindowType
	 * @param newWt
	 * @throws Exception
	 */
	public void updateWindowType(WindowType newWt) throws Exception;
	
	/**
	 * 更新一个ProfileSeries
	 * @param newPs
	 * @throws Exception
	 */
	public void updateProfileSeries(ProfileSeries newPs) throws Exception;
	//#################### update	end ##############
	
	
	//#################### delete	start ##############
	/**
	 * 删除一个型材信息
	 * @param prof
	 * @throws Exception
	 */
	public void deleteProfile(Profile prof) throws Exception;
	public void deleteProfileById(Long profileID) throws Exception;
	
	/**
	 * 删除一个Vendor
	 * @param vend
	 * @throws Exception
	 */
	public void deleteVendor(Vendor vend) throws Exception;
	public void deleteVendorByID(Long vendorID) throws Exception;
	
	/**
	 * 删除一个WindowType
	 * @param wt
	 * @throws Exception
	 */
	public void deleteWindowType(WindowType tw) throws Exception;
	public void deleteWindowTypeByID(Long WindowTypeID) throws Exception;
	
	/**
	 * 删除一个ProfileSeries
	 * @param ps
	 * @throws Exception
	 */
	public void deleteProfileSeries(ProfileSeries ps) throws Exception;
	public void deleteProfileSeriesByID(Long profileSeriesID) throws Exception;
	//#################### delete	end ##############
	
	
}


